import { Inject, Injectable } from '@nestjs/common';
import { CreateTemplateDto } from './dto/create-template.dto';
import { UpdateTemplateDto } from './dto/update-template.dto';
import { QueryDto } from './dto/query.dto';
import { ClientProxy } from '@nestjs/microservices';
import { UserBehaviorService } from '../user-behavior/user-behavior.service';
import { UserInfoDto } from '../model/dto/user-info.dto';
import { lastValueFrom } from 'rxjs';

@Injectable()
export class TemplateService {
  constructor(
    @Inject('STORE_SERVICE') private client: ClientProxy,
    private readonly userBehaviorService: UserBehaviorService
  ) { }

  async createAndTrack(createTemplateDto: CreateTemplateDto,user?: UserInfoDto) {
    // 1. Create template
    const templateResult = await lastValueFrom(
      this.client.send('createTemplate', createTemplateDto)
    );
    // 2. Track user behavior
    await this.userBehaviorService.create(createTemplateDto,user);

    return templateResult
  }

  create(createTemplateDto: CreateTemplateDto) {
    return this.client.emit('createTemplate', createTemplateDto);
  }

  findAll(query: QueryDto) {
    return this.client.send('findAllTemplate', query);
  }

  findOne(id: number) {
    return this.client.send('findOneTemplate', id);
  }

  update(id: number, updateTemplateDto: UpdateTemplateDto) {
    return this.client.send('updateTemplate', { id, updateTemplateDto });
  }

  remove(id: number) {
    return this.client.send('removeTemplate', id);
  }

}
